package com;

import com.fz.dao.StudentDAO;
import com.fz.entity.Book;
import com.fz.entity.Student;
import com.fz.mapper.BookMapper;
import com.fz.mapper.StudentMapper;
import com.fz.mybatis.MyBatisHelper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by webrx on 2017-08-24.
 */
public class Demo {

    //这个ttt方法是在工具类中使用了泛型之后，相比show方法省略了一些步骤
    //而且这个方法是按照接口走的，如果没有接口使用的是配置，就不能使用这种方法

    @Test
    public void ttt(){
        BookMapper bdao=new MyBatisHelper<BookMapper>(BookMapper.class).getMapper();
        List<Book> li=bdao.query();
        System.out.println(li.size());

        //上面演示的是Book类的泛型
        //(1)下面演示的是Student 的泛型,采用的是无参的构造方法
        StudentMapper sdao=new MyBatisHelper<StudentMapper>(StudentMapper.class).getMapper();
        List<Student> lis=sdao.queryall();
        for (Student ll:lis){
            System.out.println(ll.getName());
        }
        System.out.println("----------");

        //(2)下面演示的是Student 的泛型,采用的是有参的构造方法
        MyBatisHelper<StudentMapper> mh=new MyBatisHelper<StudentMapper>();
        StudentMapper udao=mh.getMapper(StudentMapper.class);
        //调用删除的方法,删除指定id的信息
        // udao.deleteById(1);
        //然后查询出来
        List<Student> lt=udao.queryall();
        for (Student t:lt){
            System.out.println(t.getName());
        }
        //必须要提交下，要不然数据库不同步
        // mh.close();
        System.out.println("=========");
        //(3)通过session的方法来实现
        SqlSession session=new MyBatisHelper().getSession();
        StudentMapper edao=session.getMapper(StudentMapper.class);
        //查询所有功能
        List<Student> sts=edao.queryall();
        for (Student st:sts){
            System.out.println(st.getName());
        }
        //删除功能
        edao.deleteById(5);
        //提交
        session.commit();
        List<Student> ss=edao.queryall();
        for (Student st:ss){
            System.out.println(st.getName());
        }
    }

    //上面几种方法之外，还有一种，建立一个StudentDAO类,
    // 把连接数据库包括读接口的麻烦代码都封装在里面了,这样一下简单好多
    @Test
    public void zzz(){
        StudentDAO std=new StudentDAO();
        //查询方法
        List<Student> listt=std.queryall();
        for (Student li:listt){
            System.out.println(li.getName());
        }
        //利用占位符的方式进行数据添加(必须要mybatis版本是3.4.1才行)
        std.adds("张三丰","18","河南省漯河市");
        //删除方法，使用这种方法也不用提交，因为都已经封装好了
        std.deleteById(8);
        System.out.println("----------");
        //重新查询一遍
        List<Student> litt=std.queryall();
        for (Student li:litt){
            System.out.println(li.getName());
        }
        System.out.println("----------");
        //查询某姓氏的学生
        List<Student> tt=std.queryByName("%赵%");
        for (Student ud:tt){
            System.out.println(ud.getName());
        }
        //查询学生人数
        System.out.println(std.count());
        //查出指定id学生的姓名和成绩
        Map<String,Object> map=std.showById(9);
        System.out.println(map.get("name"));
        System.out.println(map.get("score"));
        //查出所有学生的姓名和成绩
        List<Map<String,Object>> list=std.show();
        for (Map<String,Object> ma:list){
            System.out.println(ma.get("name")+"."+ma.get("score"));
           // System.out.println(ma.get("score"));
        }
    }

    //采用map集合的方式进行操作
    @Test
    public void sss(){
        SqlSession s=new MyBatisHelper<BookMapper>().getSession();
        //实例化方法接口
        BookMapper bdao=s.getMapper(BookMapper.class);
        //利用map集合进行插入
        Map<String,Object> map=new HashMap<String,Object>();
        map.put("name","《十万个为什么》");
        map.put("price","155");
        map.put("bdate","2017-8-25");
        bdao.save(map);



        //利用参数param的插入方法
        bdao.add("《百万个为什么》",188,"2018-8-9");


        //再查询一下
        List<Book> list=bdao.query();
        for (Book b:list){
            System.out.println(b.getName());
        }
        s.commit();
    }




    @Test
    public void show(){
        //封装类代替连接数据库和加载器的步骤
        SqlSession s=new MyBatisHelper<BookMapper>().getSession();
        //实例化方法接口
        BookMapper bdao=s.getMapper(BookMapper.class);
        //数据插入
        Book book = new Book();
        book.setPrice(50);
        book.setName("《html设计》");
        try {
            book.setBdate(new SimpleDateFormat("yyyy-MM-dd").parse("2015-06-20"));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        bdao.insert(book);
        //查询指定id
        Book bk=bdao.queryById(3);
        System.out.println(bk.getName());
        System.out.println("------------------");


        //数据查询
        List<Book> bks=bdao.query();
        for (Book b: bks){
            System.out.println(b.getName());
        }
        s.commit();
    }
}
